using System;
using System.Collections.Generic;
using System.Text;
using MIMPGameLibrary;

namespace MIMPWinForms.MIMPGameServices
{
    /// <summary>
    /// Defines an interface whose primary purpose is to fire events that describe user interaction with the control panel buttons.
    /// </summary>
    public interface IControlPanelEventsService
    {
        /// <summary>
        /// Occurs when the user clicks the Add New Monster button.
        /// EventData is the Monster the user wishes to add.
        /// </summary>
        event EventHandler<EventArgs<Monster>> AddNewMonsterButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Attack button.
        /// </summary>
        event EventHandler AttackButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Move button.
        /// </summary>
        event EventHandler MoveButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Second Move button.
        /// </summary>
        event EventHandler SecondMoveButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the End Turn button.
        /// </summary>
        event EventHandler EndTurnButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Swoop Attack button.
        /// </summary>
        event EventHandler SwoopAttackButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Dive button.
        /// </summary>
        event EventHandler DiveButtonClicked;
        /// <summary>
        /// Occurs when the user clicks a spell casting button. EventData is the type of Spell associated with the clicked button.
        /// </summary>
        event EventHandler<EventArgs<Monster.Spells>> SpellButtonClicked;
        /// <summary>
        /// Occurs when the user presses Enter while the ChatEntry text box has focus. EventData is the text in the text box at that time.
        /// </summary>
        event EventHandler<EventArgs<string>> ChatTextEntered;
        /// <summary>
        /// Occurs when the user wants to cancel whatever action is pending.
        /// </summary>
        event EventHandler CancelButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Delete Monster button.
        /// </summary>
        event EventHandler DeleteMonsterButtonClicked;
        /// <summary>
        /// Occurs when the user clicks the Done button, indicating that they are done selecting attackers/defenders.
        /// </summary>
        event EventHandler DoneButtonClicked;
        /// <summary>
        /// Occurs when the user is done assigning damage to the losing monsters in an attack.
        /// </summary>
        event EventHandler<EventArgs<Dictionary<Monster, int>>> DamageAssigned;
    }
}
